package utiles.infoHWSWEquipo;

import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

public class RedSigar {
	private static final String ERROR= "ERROR", NO_IP= "0.0.0.0", LO= "127.0.0.1", APIPA= "169.254.";
	private Sigar sigar;
	
	private String nombreEquipo, dominio, dnsPrimario, dnsSecundario, puertaEnlace, fqdn;
	
	private String descripcion;
	private String mac;
	private String nombreInterface;
	private String ipV4;
	private String mascara;
	private String ipRedV4;
	private String ipBroadcastV4;
	private String tipo;
	
	private String ipV6;
	
	RedSigar(){
		sigar = new Sigar();
		
		inicializarValores();
	}

	private void inicializarValores() {
		try {
			nombreEquipo= sigar.getNetInfo().getHostName();
			dominio= sigar.getNetInfo().getDomainName();
			dnsPrimario= sigar.getNetInfo().getPrimaryDns();
			dnsSecundario= sigar.getNetInfo().getSecondaryDns();
			puertaEnlace= sigar.getNetInfo().getDefaultGateway();
			fqdn= sigar.getFQDN();
		} catch (SigarException e) {
			fqdn= puertaEnlace= dnsSecundario= dnsPrimario= dominio= nombreEquipo= ERROR;
			System.err.println("Error al obtener los datos.");
			e.printStackTrace();
		}
		
		try {
			NetInterfaceConfig nic= null, nicAux;
			for(String aux: sigar.getNetInterfaceList()){
				nicAux= sigar.getNetInterfaceConfig(aux);
				if(nicAux.getAddress().equals(NO_IP) || nicAux.getAddress().equals(LO) ||
				   nicAux.getAddress().startsWith(APIPA)) continue;
				
				nic= nicAux;
			}
			ipV4= nic.getAddress();
			mascara= nic.getNetmask();
			ipBroadcastV4= nic.getBroadcast();
			descripcion= nic.getDescription();
			mac= nic.getHwaddr();
			ipRedV4= "No se obtener";
			nombreInterface= nic.getName();
			tipo= nic.getType();
		} catch (SigarException e) {
			System.err.println("Error al obtener los datos.");
			e.printStackTrace();
		}
	
	}

	@Override
	public String toString() {
		return "RedSigar [fqdn=" + fqdn + ", nombreEquipo=" + nombreEquipo
				+ ", dominio=" + dominio + ", dnsPrimario=" + dnsPrimario
				+ ", dnsSecundario=" + dnsSecundario + ", puertaEnlace="
				+ puertaEnlace + ", nombreInterface=" + nombreInterface
				+ ", descripcion=" + descripcion + ", mac=" + mac + ", ipV4="
				+ ipV4 + ", mascara=" + mascara + ", ipRedV4=" + ipRedV4
				+ ", ipBroadcastV4=" + ipBroadcastV4 + ", tipo=" + tipo
				+ ", ipV6=" + ipV6 + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((mac == null) ? 0 : mac.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		RedSigar other = (RedSigar) obj;
		if (mac == null) {
			if (other.mac != null)
				return false;
		} else if (!mac.equals(other.mac))
			return false;
		return true;
	}
	
	public static void main(String[] args) {
		System.out.println(new RedSigar());
	}
}
